Introduction

This is our R Notebook, showing the steps we took to complete the Final Project for CS 329E. This notebook includes step-by-step instructions on how to reproduce our project. To obtain our data, we used data.world.

R Configuration

Below we display our sessionInfo().

sessionInfo(package=NULL)

Data Description

The data was found on “Dr. John Rasp’s Statistics Website” (http://www2.stetson.edu/~jrasp/data.htm). It is a subset of the data from College Scorecard, a Department of Education website that gives data on various variables regarding tuition, costs and school performance.

An explanatory key for the recorded variables can be found here: https://data.world/jlee/s-17-dv-final-project/file/CollegeScorecard_ColumnNames.pdf

Cleaning Data

Here’s our ETL file to clean our data set.

source("../01 Data/R_ETL.CollegeScorecard.R")

Cleaned up Data Download

Cleaned data can be downloaded from Data.world as a .csv file. Because the dataset is so large, we filtered to only show some rows.

Hosting User: jlee
Database: S17 DV Final Project
Dataset Name: CollegeScorecard.csv

Download Link: https://query.data.world/s/dv5dl8q1jx2qb3d3bd2976b9d

source("../01 Data/Accessdataworld.R")

Side by Side Shiny and Tableau Visualizations

Descriptions: Refer to visualization captions for individual descriptions.

Dataset Column Names:

INSTNM - Institution Name; STABBR - State; CONTROL - 1 = Public. 2 = Private nonprofit. 3 = Private for-profit

Boxplot: Average Cost of Attendance for Type of School

These boxplots (Tableau left, Shiny right) demonstrate the average cost of attendance per type of school.

Histogram: SAT Averages for Universities

These histograms (Tableau left, Shiny right) demonstrate the SAT averages for universities across the United States.

Scatterplot: Instructional Expenditures vs. Net tuition

These scatterplots (Tableau left, Shiny right) explore the correlation between Instructional expenditures per full-time equivalent student and Net tuition revenue per full-time equivalent student.

Crosstab 1: Instructional Expenditures / Cost of Attendance

These crosstabs (Tableau left, Shiny right) demonstrate the ratio of instructional expenses to the average cost of attendance. They are labeled by the average cost of attendance. The red tile indicates a high ratio. The green tile indicates a medium ratio, and the blue tile indicates a low ratio. From the crosstab, one can see that public schools usually have a higher ratio, while private non-profit schools usually have a medium ratio. Private schools mostly have a medium to low ratio with the exception of some high ratios in four states.

Crosstab 2: Tuition Revenue / Total Cost

These crosstabs (Tableau left, Shiny right) demonstratae the ratio of the net tuition revenue per full-time student to the average cost of attendance. The red tile indicates a high ratio. The green tile indicates a medium ratio, and the blue tile indicates a low ratio. From the crosstab, one can see that public schools usually a medium ratio, while private non-profit schools usally have a medium to high ratio. Private schools mostly have a high ratio with the exception of some low and medium ratios some states.

Map 1: Region Cost of Attendance (Instructional Expenditures / Cost of Attendance)

These maps (Tableau left, Shiny right) demonstrate the distribution of instructional expenditure / cost of attendance ratio across the United States, where darker colors indicate higher ratios.



Map 2: Tuition Revenue to Total Cost

These maps (Tableau left, Shiny right) demonstrate the distribution of tuition revenue / total cost ratio across the United States, where darker colors indicate higher ratios.

Barchart: Instructional Expense per Type of Instutition


This barchart + table calculations (Tableau left, Shiny right) display the sum of instructional expenses across each control (public, private non-profit, and private for profit) for each state. The line shows the average of the sum of instructional expenses. This ID Sets on a map for barcharts has two sets: High Net Price and Medium Net Price for public schools. Net price is the actual amount families pay on average. The dots represent schools in the High Net Price.

Shiny Visualization and Published Application

Description: Full size static .pngs of the Shiny application, as well as a link to the live published version.

Published Link:
https://ehjkim.shinyapps.io/shinyfinal/

Boxplot: Average Cost of Attendance for Type of School




Histogram: SAT Averages for Universities




Scatterplot: Instructional Expenditures vs. Net tuition




Crosstab 1: Instructional Expenditures/Cost of Attendance




Crosstab 2: Tuition Revenue / Total Cost




Map 1: Region Cost of Attendance (Instructional Expenditures / Cost of Attendance)




Map 2: Tuition Revenue to Total Cost




Barchart: Instructional Expense per Type of Instutition




Tableau / Tableau Action Generated Visualizations

Descriptions: Full size static .pngs of the tableau visualizations. Refer to visualization captions for individual descriptions.

Boxplot: Average Cost of Attendance for Type of School




Histogram: SAT Averages for Universities




Scatterplot: Instructional Expenditures vs. Net tuition




Crosstab 1: Instructional Expenditures/Cost of Attendance




Crosstab 2: Tuition Revenue / Total Cost




Map 1: Region Cost of Attendance (Instructional Expenditures / Cost of Attendance)




Map 2: Tuition Revenue to Total Cost




Barchart: Instructional Expense per Type of Instutition




LS0tDQp0aXRsZTogIjxjZW50ZXI+PGI+Q29sbGVnZSBTY29yZWNhcmQ8L2I+PC9jZW50ZXI+Ig0KYXV0aG9yOiAiPGNlbnRlcj48Yj5ZdS1DaGlhbyBGYW5nLCBFbGl6YWJldGggS2ltLCBTZXVuZyBIb29uIExlZSwgT3JsYW5kbyBSZWF0ZWd1aTwvYj48L2NlbnRlcj4iDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KLS0tDQoNCiMqKkludHJvZHVjdGlvbioqDQpUaGlzIGlzIG91ciBSIE5vdGVib29rLCBzaG93aW5nIHRoZSBzdGVwcyB3ZSB0b29rIHRvIGNvbXBsZXRlIHRoZSBGaW5hbCBQcm9qZWN0IGZvciBDUyAzMjlFLiBUaGlzIG5vdGVib29rIGluY2x1ZGVzIHN0ZXAtYnktc3RlcCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHJlcHJvZHVjZSBvdXIgcHJvamVjdC4gVG8gb2J0YWluIG91ciBkYXRhLCB3ZSB1c2VkIGRhdGEud29ybGQuIA0KDQojKipSIENvbmZpZ3VyYXRpb24qKg0KQmVsb3cgd2UgZGlzcGxheSBvdXIgc2Vzc2lvbkluZm8oKS4NCg0KYGBge3Igc2Vzc2lvbkluZm99DQpzZXNzaW9uSW5mbyhwYWNrYWdlPU5VTEwpDQpgYGANCg0KIyoqRGF0YSBEZXNjcmlwdGlvbioqDQpUaGUgZGF0YSB3YXMgZm91bmQgb24gIkRyLiBKb2huIFJhc3AncyBTdGF0aXN0aWNzIFdlYnNpdGUiIChodHRwOi8vd3d3Mi5zdGV0c29uLmVkdS9+anJhc3AvZGF0YS5odG0pLiBJdCBpcyBhIHN1YnNldCBvZiB0aGUgZGF0YSBmcm9tIENvbGxlZ2UgU2NvcmVjYXJkLCBhIERlcGFydG1lbnQgb2YgRWR1Y2F0aW9uIHdlYnNpdGUgdGhhdCBnaXZlcyBkYXRhIG9uIHZhcmlvdXMgdmFyaWFibGVzIHJlZ2FyZGluZyB0dWl0aW9uLCBjb3N0cyBhbmQgc2Nob29sIHBlcmZvcm1hbmNlLiA8L2JyPg0KDQpBbiBleHBsYW5hdG9yeSBrZXkgZm9yIHRoZSByZWNvcmRlZCB2YXJpYWJsZXMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZGF0YS53b3JsZC9qbGVlL3MtMTctZHYtZmluYWwtcHJvamVjdC9maWxlL0NvbGxlZ2VTY29yZWNhcmRfQ29sdW1uTmFtZXMucGRmIDwvYnI+DQoNCiMqKkNsZWFuaW5nIERhdGEqKg0KSGVyZSdzIG91ciBFVEwgZmlsZSB0byBjbGVhbiBvdXIgZGF0YSBzZXQuDQoNCmBgYHtyfQ0Kc291cmNlKCIuLi8wMSBEYXRhL1JfRVRMLkNvbGxlZ2VTY29yZWNhcmQuUiIpDQpgYGANCg0KIyoqQ2xlYW5lZCB1cCBEYXRhIERvd25sb2FkKioNCkNsZWFuZWQgZGF0YSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIERhdGEud29ybGQgYXMgYSAuY3N2IGZpbGUuIEJlY2F1c2UgdGhlIGRhdGFzZXQgaXMgc28gbGFyZ2UsIHdlIGZpbHRlcmVkIHRvIG9ubHkgc2hvdyBzb21lIHJvd3MuDQoNCkhvc3RpbmcgVXNlcjogamxlZTwvYnI+DQpEYXRhYmFzZTogUzE3IERWIEZpbmFsIFByb2plY3Q8L2JyPg0KRGF0YXNldCBOYW1lOiBDb2xsZWdlU2NvcmVjYXJkLmNzdg0KDQpEb3dubG9hZCBMaW5rOiBodHRwczovL3F1ZXJ5LmRhdGEud29ybGQvcy9kdjVkbDhxMWp4MnFiM2QzYmQyOTc2YjlkDQoNCmBgYHtyfQ0Kc291cmNlKCIuLi8wMSBEYXRhL0FjY2Vzc2RhdGF3b3JsZC5SIikNCmBgYA0KDQoNCiMqKlNpZGUgYnkgU2lkZSBTaGlueSBhbmQgVGFibGVhdSBWaXN1YWxpemF0aW9ucyoqDQoqKkRlc2NyaXB0aW9uczoqKiBSZWZlciB0byB2aXN1YWxpemF0aW9uIGNhcHRpb25zIGZvciBpbmRpdmlkdWFsIGRlc2NyaXB0aW9ucy48L2JyPjwvYnI+DQpEYXRhc2V0IENvbHVtbiBOYW1lczo8L2JyPiA8L2JyPiANCklOU1ROTSAtIEluc3RpdHV0aW9uIE5hbWU7IA0KU1RBQkJSIC0gU3RhdGU7IA0KQ09OVFJPTCAtIDEgPSBQdWJsaWMuIDIgPSBQcml2YXRlIG5vbnByb2ZpdC4gMyA9IFByaXZhdGUgZm9yLXByb2ZpdCA8L2JyPjwvYnI+DQo8Yj5Cb3hwbG90OiBBdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2w8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9BdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2wgQm94cGxvdCAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Cb3hwbG90LnBuZyl7IHdpZHRoPTQ5JSB9DQpUaGVzZSBib3hwbG90cyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGVtb25zdHJhdGUgdGhlIGF2ZXJhZ2UgY29zdCBvZiBhdHRlbmRhbmNlIHBlciB0eXBlIG9mIHNjaG9vbC48L2JyPjwvYnI+DQoNCjxiPkhpc3RvZ3JhbTogU0FUIEF2ZXJhZ2VzIGZvciBVbml2ZXJzaXRpZXM8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9TQVRfQVZHIEhpc3RvZ3JhbSAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9IaXN0b2dyYW0ucG5nKXsgd2lkdGg9NDklIH0NClRoZXNlIGhpc3RvZ3JhbXMgKFRhYmxlYXUgbGVmdCwgU2hpbnkgcmlnaHQpIGRlbW9uc3RyYXRlIHRoZSBTQVQgYXZlcmFnZXMgZm9yIHVuaXZlcnNpdGllcyBhY3Jvc3MgdGhlIFVuaXRlZCBTdGF0ZXMuPC9icj48L2JyPg0KDQo8Yj5TY2F0dGVycGxvdDogSW5zdHJ1Y3Rpb25hbCBFeHBlbmRpdHVyZXMgdnMuIE5ldCB0dWl0aW9uPC9iPiA8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvU2NhdHRlciBQbG90IChUYWJsZWF1KS5wbmcpeyB3aWR0aD00OSUgfQ0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1NjYXR0ZXJwbG90LnBuZyl7IHdpZHRoPTQ5JSB9DQpUaGVzZSBzY2F0dGVycGxvdHMgKFRhYmxlYXUgbGVmdCwgU2hpbnkgcmlnaHQpIGV4cGxvcmUgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gSW5zdHJ1Y3Rpb25hbCBleHBlbmRpdHVyZXMgcGVyIGZ1bGwtdGltZSBlcXVpdmFsZW50IHN0dWRlbnQgYW5kIE5ldCB0dWl0aW9uIHJldmVudWUgcGVyIGZ1bGwtdGltZSBlcXVpdmFsZW50IHN0dWRlbnQuDQo8L2JyPjwvYnI+DQoNCg0KPGI+Q3Jvc3N0YWIgMTogSW5zdHJ1Y3Rpb25hbCBFeHBlbmRpdHVyZXMgLyBDb3N0IG9mIEF0dGVuZGFuY2U8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Dcm9zc3RhYiArIEtQSSB3IFNldCAxIChUYWJsZWF1KS5wbmcpeyB3aWR0aD00OSUgfQ0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL2twaTEucG5nKXsgd2lkdGg9NDklIH0NClRoZXNlIGNyb3NzdGFicyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGVtb25zdHJhdGUgdGhlIHJhdGlvIG9mIGluc3RydWN0aW9uYWwgZXhwZW5zZXMgdG8gdGhlIGF2ZXJhZ2UgY29zdCBvZiBhdHRlbmRhbmNlLiBUaGV5IGFyZSBsYWJlbGVkIGJ5IHRoZSBhdmVyYWdlIGNvc3Qgb2YgYXR0ZW5kYW5jZS4gVGhlIHJlZCB0aWxlIGluZGljYXRlcyBhIGhpZ2ggcmF0aW8uIFRoZSBncmVlbiB0aWxlIGluZGljYXRlcyBhIG1lZGl1bSByYXRpbywgYW5kIHRoZSBibHVlIHRpbGUgaW5kaWNhdGVzIGEgbG93IHJhdGlvLiBGcm9tIHRoZSBjcm9zc3RhYiwgb25lIGNhbiBzZWUgdGhhdCBwdWJsaWMgc2Nob29scyB1c3VhbGx5IGhhdmUgYSBoaWdoZXIgcmF0aW8sIHdoaWxlIHByaXZhdGUgbm9uLXByb2ZpdCBzY2hvb2xzIHVzdWFsbHkgaGF2ZSBhIG1lZGl1bSByYXRpby4gUHJpdmF0ZSBzY2hvb2xzIG1vc3RseSBoYXZlIGEgbWVkaXVtIHRvIGxvdyByYXRpbyB3aXRoIHRoZSBleGNlcHRpb24gb2Ygc29tZSBoaWdoIHJhdGlvcyBpbiBmb3VyIHN0YXRlcy4NCjwvYnI+PC9icj4NCg0KPGI+Q3Jvc3N0YWIgMjogVHVpdGlvbiBSZXZlbnVlIC8gVG90YWwgQ29zdDwvYj4gPC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL0Nyb3NzdGFiICsgS1BJIHcgU2V0IDIgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTQ5JSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMva3BpMi5wbmcpeyB3aWR0aD00OSUgfQ0KVGhlc2UgY3Jvc3N0YWJzIChUYWJsZWF1IGxlZnQsIFNoaW55IHJpZ2h0KSBkZW1vbnN0cmF0YWUgdGhlIHJhdGlvIG9mIHRoZSBuZXQgdHVpdGlvbiByZXZlbnVlIHBlciBmdWxsLXRpbWUgc3R1ZGVudCB0byB0aGUgYXZlcmFnZSBjb3N0IG9mIGF0dGVuZGFuY2UuIFRoZSByZWQgdGlsZSBpbmRpY2F0ZXMgYSBoaWdoIHJhdGlvLiBUaGUgZ3JlZW4gdGlsZSBpbmRpY2F0ZXMgYSBtZWRpdW0gcmF0aW8sIGFuZCB0aGUgYmx1ZSB0aWxlIGluZGljYXRlcyBhIGxvdyByYXRpby4gRnJvbSB0aGUgY3Jvc3N0YWIsIG9uZSBjYW4gc2VlIHRoYXQgcHVibGljIHNjaG9vbHMgdXN1YWxseSBhIG1lZGl1bSByYXRpbywgd2hpbGUgcHJpdmF0ZSBub24tcHJvZml0IHNjaG9vbHMgdXNhbGx5IGhhdmUgYSBtZWRpdW0gdG8gaGlnaCByYXRpby4gUHJpdmF0ZSBzY2hvb2xzIG1vc3RseSBoYXZlIGEgaGlnaCByYXRpbyB3aXRoIHRoZSBleGNlcHRpb24gb2Ygc29tZSBsb3cgYW5kIG1lZGl1bSByYXRpb3Mgc29tZSBzdGF0ZXMuDQo8L2JyPjwvYnI+DQoNCjxiPk1hcCAxOiBSZWdpb24gQ29zdCBvZiBBdHRlbmRhbmNlIChJbnN0cnVjdGlvbmFsIEV4cGVuZGl0dXJlcyAvIENvc3Qgb2YgQXR0ZW5kYW5jZSk8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Dcm9zc3RhYiBNYXAgMSAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9NYXAxLnBuZyl7IHdpZHRoPTQ5JSB9DQpUaGVzZSBtYXBzIChUYWJsZWF1IGxlZnQsIFNoaW55IHJpZ2h0KSBkZW1vbnN0cmF0ZSB0aGUgZGlzdHJpYnV0aW9uIG9mIGluc3RydWN0aW9uYWwgZXhwZW5kaXR1cmUgLyBjb3N0IG9mIGF0dGVuZGFuY2UgcmF0aW8gYWNyb3NzIHRoZSBVbml0ZWQgU3RhdGVzLCB3aGVyZSBkYXJrZXIgY29sb3JzIGluZGljYXRlIGhpZ2hlciByYXRpb3MuDQoNCjwvYnI+PC9icj4NCg0KPGI+TWFwIDI6IFR1aXRpb24gUmV2ZW51ZSB0byBUb3RhbCBDb3N0PC9iPiA8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIgTWFwIDIgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTQ5JSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvTWFwMi5wbmcpeyB3aWR0aD00OSUgfQ0KVGhlc2UgbWFwcyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGVtb25zdHJhdGUgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0dWl0aW9uIHJldmVudWUgLyB0b3RhbCBjb3N0IHJhdGlvIGFjcm9zcyB0aGUgVW5pdGVkIFN0YXRlcywgd2hlcmUgZGFya2VyIGNvbG9ycyBpbmRpY2F0ZSBoaWdoZXIgcmF0aW9zLiANCjwvYnI+PC9icj4NCg0KDQo8Yj5CYXJjaGFydDogSW5zdHJ1Y3Rpb25hbCBFeHBlbnNlIHBlciBUeXBlIG9mIEluc3R1dGl0aW9uPC9iPiA8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQmFyY2hhcnQgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTMwJSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQmFyY2hhcnQgSUQgU2V0cyBNYXAgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTMwJSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvYmFyY2hhcnQucG5nKXsgd2lkdGg9MzAlIH08L2JyPg0KVGhpcyBiYXJjaGFydCArIHRhYmxlIGNhbGN1bGF0aW9ucyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGlzcGxheSB0aGUgc3VtIG9mIGluc3RydWN0aW9uYWwgZXhwZW5zZXMgYWNyb3NzIGVhY2ggY29udHJvbCAocHVibGljLCBwcml2YXRlIG5vbi1wcm9maXQsIGFuZCBwcml2YXRlIGZvciBwcm9maXQpIGZvciBlYWNoIHN0YXRlLiBUaGUgbGluZSBzaG93cyB0aGUgYXZlcmFnZSBvZiB0aGUgc3VtIG9mIGluc3RydWN0aW9uYWwgZXhwZW5zZXMuDQpUaGlzIElEIFNldHMgb24gYSBtYXAgZm9yIGJhcmNoYXJ0cyBoYXMgdHdvIHNldHM6IEhpZ2ggTmV0IFByaWNlIGFuZCBNZWRpdW0gTmV0IFByaWNlIGZvciBwdWJsaWMgc2Nob29scy4gTmV0IHByaWNlIGlzIHRoZSBhY3R1YWwgYW1vdW50IGZhbWlsaWVzIHBheSBvbiBhdmVyYWdlLiBUaGUgZG90cyByZXByZXNlbnQgc2Nob29scyBpbiB0aGUgSGlnaCBOZXQgUHJpY2UuDQo8L2JyPjwvYnI+DQoNCiMqKlNoaW55IFZpc3VhbGl6YXRpb24gYW5kIFB1Ymxpc2hlZCBBcHBsaWNhdGlvbioqDQoqKkRlc2NyaXB0aW9uOioqIEZ1bGwgc2l6ZSBzdGF0aWMgLnBuZ3Mgb2YgdGhlIFNoaW55IGFwcGxpY2F0aW9uLCBhcyB3ZWxsIGFzIGEgbGluayB0byB0aGUgbGl2ZSBwdWJsaXNoZWQgdmVyc2lvbi48YnI+DQoNClB1Ymxpc2hlZCBMaW5rOjwvYnI+DQpodHRwczovL2VoamtpbS5zaGlueWFwcHMuaW8vc2hpbnlmaW5hbC88L2JyPg0KDQpCb3hwbG90OiBBdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2w8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQm94cGxvdC5wbmcpPGJyPjxicj48YnI+DQoNCkhpc3RvZ3JhbTogU0FUIEF2ZXJhZ2VzIGZvciBVbml2ZXJzaXRpZXM8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvSGlzdG9ncmFtLnBuZyk8YnI+PGJyPjxicj4NCg0KU2NhdHRlcnBsb3Q6IEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzIHZzLiBOZXQgdHVpdGlvbjwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9TY2F0dGVycGxvdC5wbmcpPGJyPjxicj48YnI+DQoNCkNyb3NzdGFiIDE6IEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzL0Nvc3Qgb2YgQXR0ZW5kYW5jZTwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9rcGkxLnBuZyk8YnI+PGJyPjxicj4NCg0KQ3Jvc3N0YWIgMjogVHVpdGlvbiBSZXZlbnVlIC8gVG90YWwgQ29zdDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9rcGkyLnBuZyk8YnI+PGJyPjxicj4NCg0KTWFwIDE6IFJlZ2lvbiBDb3N0IG9mIEF0dGVuZGFuY2UgKEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzIC8gQ29zdCBvZiBBdHRlbmRhbmNlKTwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9NYXAxLnBuZyk8YnI+PGJyPjxicj4NCg0KTWFwIDI6IFR1aXRpb24gUmV2ZW51ZSB0byBUb3RhbCBDb3N0PC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL01hcDIucG5nKTxicj48YnI+PGJyPg0KDQpCYXJjaGFydDogSW5zdHJ1Y3Rpb25hbCBFeHBlbnNlIHBlciBUeXBlIG9mIEluc3R1dGl0aW9uPC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL2JhcmNoYXJ0LnBuZyk8YnI+PGJyPjxicj4NCg0KDQojKipUYWJsZWF1IC8gVGFibGVhdSBBY3Rpb24gR2VuZXJhdGVkIFZpc3VhbGl6YXRpb25zKioNCioqRGVzY3JpcHRpb25zOioqIEZ1bGwgc2l6ZSBzdGF0aWMgLnBuZ3Mgb2YgdGhlIHRhYmxlYXUgdmlzdWFsaXphdGlvbnMuIFJlZmVyIHRvIHZpc3VhbGl6YXRpb24gY2FwdGlvbnMgZm9yIGluZGl2aWR1YWwgZGVzY3JpcHRpb25zLg0KDQpCb3hwbG90OiBBdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2w8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQXZlcmFnZSBDb3N0IG9mIEF0dGVuZGFuY2UgZm9yIFR5cGUgb2YgU2Nob29sIEJveHBsb3QgKFRhYmxlYXUpLnBuZyk8YnI+PGJyPjxicj4NCg0KSGlzdG9ncmFtOiBTQVQgQXZlcmFnZXMgZm9yIFVuaXZlcnNpdGllczwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9TQVRfQVZHIEhpc3RvZ3JhbSAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpTY2F0dGVycGxvdDogSW5zdHJ1Y3Rpb25hbCBFeHBlbmRpdHVyZXMgdnMuIE5ldCB0dWl0aW9uPC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1NjYXR0ZXIgUGxvdCAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpDcm9zc3RhYiAxOiBJbnN0cnVjdGlvbmFsIEV4cGVuZGl0dXJlcy9Db3N0IG9mIEF0dGVuZGFuY2U8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIgKyBLUEkgdyBTZXQgMSAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpDcm9zc3RhYiAyOiBUdWl0aW9uIFJldmVudWUgLyBUb3RhbCBDb3N0PC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL0Nyb3NzdGFiICsgS1BJIHcgU2V0IDIgKFRhYmxlYXUpLnBuZyk8YnI+PGJyPjxicj4NCg0KTWFwIDE6IFJlZ2lvbiBDb3N0IG9mIEF0dGVuZGFuY2UgKEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzIC8gQ29zdCBvZiBBdHRlbmRhbmNlKTwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Dcm9zc3RhYiBNYXAgMSAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpNYXAgMjogVHVpdGlvbiBSZXZlbnVlIHRvIFRvdGFsIENvc3Q8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIgTWFwIDIgKFRhYmxlYXUpLnBuZyk8YnI+PGJyPjxicj4NCg0KQmFyY2hhcnQ6IEluc3RydWN0aW9uYWwgRXhwZW5zZSBwZXIgVHlwZSBvZiBJbnN0dXRpdGlvbjwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9CYXJjaGFydCAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9CYXJjaGFydCBJRCBTZXRzIE1hcCAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH08YnI+PGJyPjxicj4NCg0KDQoNCg0KPC9jZW50ZXI+DQo=